package juanca.mole;

import java.util.Calendar;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import com.savagelook.android.JsonHelper;

import ClasesExtras.GetIpAddress;
import ClasesExtras.ManejadorCampos;
import ClasesExtras.handlerAlertMessage;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;
import android.widget.Toast;

public class LimpTanqueReserva extends Activity {

	private int fAno;
	private int fMes;
	private int fDia;
	private int hMinuto;
	private int hHora;
	private boolean SALIR;
	private boolean rotaAgua;
	private boolean limpiaTanque;
	private String idEmpleado;
	private String passwEmpleado;
	private String idOperarioEmpleado;

	public ProgressDialog progressDialog;
	public String time;
	public String date;
	private String fechaUsuario;
	private String tiempoUsuario;
	private String fechaSistema;
	private String tiempoSistema;

	public static final int DATE_DIALOG_ID = 0;
	public static final int TIME_DIALOG_ID = 1;
	private String URL_VALIDAR_USUARIO;
	private String URL_VALIDAR_LIMPIEZA_TANQUE;
	private String URL_VALIDAR_ROTACION_AGUA;
	private String URL_REGISTRO_LIMPIEZA_TANQUE;
	private String URL_REGISTRO_ROTACION_AGUA;
	private static final String CNV = "cnv";
	private static final String PNV = "pnv";
	private static final String no_permiso = "no_permiso";
	private LimpTanqueReserva self = this;

	private Button btnRegLimpTanqR;
	private EditText etIdLimpTanqR;
	private EditText etPasswLimpTanqR;
	private CheckBox chBxRotaAgua;
	private CheckBox chBxLimpTanque;
	private ManejadorCampos manejador;
	private handlerAlertMessage manejadorMensajes;
	private Activity activity;

	/**
	 * @return the sALIR
	 */
	public boolean isSALIR() {
		return SALIR;
	}

	/**
	 * @param sALIR
	 *            the sALIR to set
	 */
	public void setSALIR(boolean sALIR) {
		SALIR = sALIR;
	}

	/**
	 * @return the idOperarioEmpleado
	 */
	public String getIdOperarioEmpleado() {
		return idOperarioEmpleado;
	}

	/**
	 * @param idOperarioEmpleado
	 *            the idOperarioEmpleado to set
	 */
	public void setIdOperarioEmpleado(String idOperarioEmpleado) {
		this.idOperarioEmpleado = idOperarioEmpleado;
		this.setSALIR(true);
	}

	/**
	 * @return the tiempoSistema
	 */
	public String getTiempoSistema() {
		return tiempoSistema;
	}

	/**
	 * @param tiempoSistema
	 *            the tiempoSistema to set
	 */
	public void setTiempoSistema(String tiempoSistema) {
		this.tiempoSistema = tiempoSistema;
	}

	/**
	 * @return the fechaSistema
	 */
	public String getFechaSistema() {
		return fechaSistema;
	}

	/**
	 * @param fechaSistema
	 *            the fechaSistema to set
	 */
	public void setFechaSistema(String fechaSistema) {
		this.fechaSistema = fechaSistema;
	}

	/**
	 * @return the tiempoUsuario
	 */
	public String getTiempoUsuario() {
		return tiempoUsuario;
	}

	/**
	 * @param tiempoUsuario
	 *            the tiempoUsuario to set
	 */
	public void setTiempoUsuario(String tiempoUsuario) {
		this.tiempoUsuario = tiempoUsuario;
		this.setSALIR(true);
	}

	/**
	 * @return the fechaUsuario
	 */
	public String getFechaUsuario() {
		return fechaUsuario;
	}

	/**
	 * @param fechaUsuario
	 *            the fechaUsuario to set
	 */
	public void setFechaUsuario(String fechaUsuario) {
		this.fechaUsuario = fechaUsuario;
		this.setSALIR(true);
	}

	/**
	 * @return the passwEmpleado
	 */
	public String getPasswEmpleado() {
		return passwEmpleado;
	}

	/**
	 * @param passwEmpleado
	 *            the passwEmpleado to set
	 */
	public void setPasswEmpleado(String passwEmpleado) {
		this.passwEmpleado = passwEmpleado;
		this.setSALIR(true);
	}

	/**
	 * @return the idEmpleado
	 */
	public String getIdEmpleado() {
		return idEmpleado;
	}

	/**
	 * @param idEmpleado
	 *            the idEmpleado to set
	 */
	public void setIdEmpleado(String idEmpleado) {
		this.idEmpleado = idEmpleado;
		this.setSALIR(true);
	}

	/**
	 * @return the limpiaTanque
	 */
	public boolean isLimpiaTanque() {
		return limpiaTanque;
	}

	/**
	 * @param limpiaTanque
	 *            the limpiaTanque to set
	 */
	public void setLimpiaTanque(boolean limpiaTanque) {
		this.limpiaTanque = limpiaTanque;
	}

	/**
	 * @return the rotaAgua
	 */
	public boolean isRotaAgua() {
		return rotaAgua;
	}

	/**
	 * @param rotaAgua
	 *            the rotaAgua to set
	 */
	public void setRotaAgua(boolean rotaAgua) {
		this.rotaAgua = rotaAgua;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_limp_tanque_reserva);

		getWindow().setSoftInputMode(
				WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

		btnRegLimpTanqR = (Button) findViewById(R.id.btnRegLimpTanqR);
		chBxRotaAgua = (CheckBox) findViewById(R.id.chBxRotaAgua);
		chBxLimpTanque = (CheckBox) findViewById(R.id.chBxLimpTanque);
		etIdLimpTanqR = (EditText) findViewById(R.id.etIdLimpTanqR);
		etPasswLimpTanqR = (EditText) findViewById(R.id.etPasswLimpTanqR);
		manejadorMensajes = new handlerAlertMessage();
		manejador = new ManejadorCampos();
		activity = this;

		btnRegLimpTanqR.setEnabled(false);

	}

	@Override
	protected void onStart() {
		super.onStart();
		GetIpAddress direccion = new GetIpAddress(this);

		if (direccion.getDireccion() != null) {
			URL_VALIDAR_USUARIO = direccion.getDireccion() + "/validar.json";
			URL_VALIDAR_LIMPIEZA_TANQUE = direccion.getDireccion()
					+ "/validar_limpieza_tanque.json";
			URL_VALIDAR_ROTACION_AGUA = direccion.getDireccion()
					+ "/validar_rotacion_agua.json";
			URL_REGISTRO_LIMPIEZA_TANQUE = direccion.getDireccion()
					+ "/registros_limpieza_tanque.json";
			URL_REGISTRO_ROTACION_AGUA = direccion.getDireccion()
					+ "/registros_rotacion_agua.json";
			final ProgressDialog pd = ProgressDialog.show(this, null,
					this.getString(R.string.PbMsjCargando), true, true);

			new Thread(new Runnable() {
				@Override
				public void run() {
					self.validacionTanque(URL_VALIDAR_ROTACION_AGUA,
							URL_VALIDAR_LIMPIEZA_TANQUE);
					Log.e("ServicioRest",
							"entra a URL_VALIDAR_ROTACION_AGUA y URL_VALIDAR_LIMPIEZA_TANQUE ");

					pd.dismiss();

				}
			}).start();
		} else {
			new AlertDialog.Builder(this)
					.setIcon(android.R.drawable.ic_dialog_alert)
					.setTitle(R.string.tituloAlerta)
					.setMessage(R.string.msjErSinDireccion)
					.setPositiveButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {// un
								// listener que al pulsar, cierre la
								// aplicacion
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									// Salir
									Intent intent = new Intent();
									intent.setClass(activity, Etapas.class);
									startActivity(intent);
								}
							}).show();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.layout_limp_tanque_reserva, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle item selection
		switch (item.getItemId()) {
		case R.id.menu_settings:

			if (this.salir()) {

				new AlertDialog.Builder(this)
						.setIcon(android.R.drawable.ic_dialog_alert)
						.setTitle(R.string.tituloAlerta)
						.setMessage(R.string.msjPregunta)
						.setNegativeButton(R.string.btnNo, null)// sin listener
						.setPositiveButton(R.string.btnSi,
								new DialogInterface.OnClickListener() {// un
									// listener que al pulsar, cierre la
									// aplicacion
									@Override
									public void onClick(DialogInterface dialog,
											int which) {
										// Salir
										Intent intent = new Intent();
										intent.setClass(activity, Etapas.class);
										startActivity(intent);
									}
								}).show();

				// Si el listener devuelve true, significa que el evento esta
				// procesado, y nadie debe hacer nada mas
				return true;
			} else {
				Intent intent = new Intent();
				intent.setClass(this, Etapas.class);
				startActivity(intent);
			}

		default:
			return super.onOptionsItemSelected(item);
		}
	}

	@SuppressWarnings("deprecation")
	public void FechaTanRes(View v) {
		final Calendar c = Calendar.getInstance();
		fAno = c.get(Calendar.YEAR);
		fMes = c.get(Calendar.MONTH);
		fDia = c.get(Calendar.DAY_OF_MONTH);
		showDialog(DATE_DIALOG_ID);
	}

	@SuppressWarnings("deprecation")
	public void HoraTanRes(View v) {
		final Calendar c = Calendar.getInstance();
		hHora = c.get(Calendar.HOUR_OF_DAY);
		hMinuto = c.get(Calendar.MINUTE);
		showDialog(TIME_DIALOG_ID);

	}

	@SuppressLint("SimpleDateFormat")
	private TimePickerDialog.OnTimeSetListener showtime = new TimePickerDialog.OnTimeSetListener() {

		@SuppressLint("SimpleDateFormat")
		@Override
		public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
			hHora = hourOfDay;
			hMinuto = minute;

			Context context = getApplicationContext();
			CharSequence text = new StringBuilder().append(hHora).append(":")
					.append(hMinuto);
			int duration = Toast.LENGTH_SHORT;

			Toast toast = Toast.makeText(context, text, duration);
			toast.show();

			time = (hHora + ":" + hMinuto).toString();

			setTiempoUsuario(time);

		}
	};

	private DatePickerDialog.OnDateSetListener showdate = new DatePickerDialog.OnDateSetListener() {

		@SuppressLint("SimpleDateFormat")
		@Override
		public void onDateSet(DatePicker view, int year, int monthOfYear,
				int dayOfMonth) {
			fAno = year;
			fMes = monthOfYear + 1;
			fDia = dayOfMonth;

			Context context = getApplicationContext();
			CharSequence text = new StringBuilder().append(fDia).append("-")
					.append(fMes).append("-").append(fAno);
			int duration = Toast.LENGTH_SHORT;

			Toast toast = Toast.makeText(context, text, duration);
			toast.show();

			date = (fDia + "-" + fMes + "-" + fAno + "-").toString();

			setFechaUsuario(date);

		}
	};

	@Override
	protected Dialog onCreateDialog(int id) {
		switch (id) {
		case TIME_DIALOG_ID:
			return new TimePickerDialog(this, showtime, hHora, hMinuto, true);

		case DATE_DIALOG_ID:
			return new DatePickerDialog(this, showdate, fAno, fMes, fDia);
		}
		return null;
	}

	// método que captura la fecha y la hora del sistema
	@SuppressLint("SimpleDateFormat")
	public void fechaHoraSistema() {
		final Calendar c = Calendar.getInstance();
		int ano = c.get(Calendar.YEAR);
		int mes = c.get(Calendar.MONTH) + 1;
		int dia = c.get(Calendar.DAY_OF_MONTH);
		int hora = c.get(Calendar.HOUR_OF_DAY);
		int minuto = c.get(Calendar.MINUTE);

		String date = (dia + "-" + mes + "-" + ano + "-").toString();
		String time = (hora + ":" + minuto).toString();

		this.setFechaSistema(date);
		this.setTiempoSistema(time);

	}

	public void onCheckboxClicked(View view) {
		// Is the view now checked?
		boolean checked = ((CheckBox) view).isChecked();

		// Check which checkbox was clicked
		switch (view.getId()) {
		case R.id.chBxRotaAgua:
			if (checked) {
				this.setRotaAgua(checked);
				this.setSALIR(true);
				btnRegLimpTanqR.setEnabled(true);
			} else {
				this.setRotaAgua(!checked);
				this.setSALIR(false);
				if (!this.chBxLimpTanque.isChecked()
						|| !this.chBxLimpTanque.isEnabled())
					btnRegLimpTanqR.setEnabled(false);
			}
			break;
		case R.id.chBxLimpTanque:
			if (checked) {
				this.setLimpiaTanque(checked);
				this.setSALIR(true);
				btnRegLimpTanqR.setEnabled(true);
			} else {
				this.setLimpiaTanque(!checked);
				this.setSALIR(false);
				if (!this.chBxRotaAgua.isChecked()
						|| !this.chBxRotaAgua.isEnabled())
					btnRegLimpTanqR.setEnabled(false);
			}

			break;
		}
	}

	// metodo que registra la limpieza del tanque reserva
	public void limpiezaTanqueR(View v) {
		int identificacion = manejador.identificacion(etIdLimpTanqR);
		int contrasena = manejador.contrasena(etPasswLimpTanqR);

		if (identificacion != 0) {
			switch (identificacion) {
			case 8:
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.msjIdenVacio,
						R.string.btnAceptar);
				break;
			case 9:
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.msjIdenNumer,
						R.string.btnAceptar);

				break;

			case 10:
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.msjIdenEspac,
						R.string.btnAceptar);
				break;
			}
		} else {
			if (contrasena != 0) {
				switch (contrasena) {
				case 11:
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloAlerta, R.string.msjContraVacio,
							R.string.btnAceptar);
					break;
				case 12:
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloAlerta, R.string.msjContraMaxmin,
							R.string.btnAceptar);
					break;
				}
			} else {
				this.validar();
			}
		}

	}

	public void validar() {
		this.fechaHoraSistema();
		if (this.getFechaSistema() != null && this.getTiempoSistema() != null) {
			if (this.getFechaUsuario() != null) {
				if (this.getTiempoUsuario() != null) {

					this.setIdEmpleado(etIdLimpTanqR.getText().toString());
					this.setPasswEmpleado(this.etPasswLimpTanqR.getText()
							.toString());/*
										 * toma passw de campo
										 */

					progressDialog = new ProgressDialog(self);
					progressDialog.setMessage(self
							.getString(R.string.PbMsjRegistrando));
					progressDialog.setCancelable(true);
					progressDialog.show();
					new Thread(new Runnable() {
						@Override
						public void run() {
							self.validarUsuario();
							Log.e("ServicioRest", "entra validar usuario");

						}
					}).start();
				} else {
					// seleccione la hora
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloAlerta, R.string.msjSelecHora,
							R.string.btnAceptar);
				}
			} else {
				// seleccione la fecha
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.msjSelecFecha,
						R.string.btnAceptar);
			}
		}
	}

	// metodo que lo redirecciona a la vista pre-producción
	public void goPreProd(View view) {
		if (this.salir()) {

			new AlertDialog.Builder(this)
					.setIcon(android.R.drawable.ic_dialog_alert)
					.setTitle(R.string.tituloAlerta)
					.setMessage(R.string.msjPregunta)
					.setNegativeButton(R.string.btnNo, null)// sin listener
					.setPositiveButton(R.string.btnSi,
							new DialogInterface.OnClickListener() {// un
								// listener que al pulsar, cierre la
								// aplicacion
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									// Salir
									Intent intent = new Intent();
									intent.setClass(activity,
											PreProduccion.class);
									startActivity(intent);
								}
							}).show();

			// Si el listener devuelve true, significa que el evento esta
			// procesado, y nadie debe hacer nada mas

		} else {
			Intent intent = new Intent();
			intent.setClass(this, PreProduccion.class);
			startActivity(intent);
		}
	}

	public void validacionTanque(String url1, String url2) {
		try {
			JSONArray limpTanqueArray = JsonHelper.getJsonArrayFromUrl(url2);
			JSONArray cambioAguaArray = JsonHelper.getJsonArrayFromUrl(url1);
			String estadoAgua = cambioAguaArray.getJSONObject(0).getString(
					"estado");
			String estadoTanque = limpTanqueArray.getJSONObject(0).getString(
					"estado");

			if (estadoAgua.equals("false")) {
				runOnUiThread(new Runnable() {
					public void run() {
						chBxRotaAgua.setChecked(true);
						chBxRotaAgua.setEnabled(false);

						Log.e("ServicioRest",
								"entra al hilo del false rota agua");

					}
				});

			}

			if (estadoTanque.equals("false")) {
				runOnUiThread(new Runnable() {
					public void run() {
						chBxLimpTanque.setChecked(true);
						chBxLimpTanque.setEnabled(false);

						Log.e("ServicioRest", "entra al hilo de limp tanque");

					}
				});

			}

		} catch (Exception ex) {
			/*
			 * hilo que muestra el mensaje de error de conexion al cargar los
			 * datos
			 */
			runOnUiThread(new Runnable() {
				public void run() {

					AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
							activity);
					mensajeEmergente.setTitle(R.string.tituloError);
					mensajeEmergente.setMessage(R.string.msjERConexionCargar);
					mensajeEmergente.setNeutralButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {
									LimpTanqueReserva.this.finish();

								}
							});

					mensajeEmergente.create();
					mensajeEmergente.show();
				}
			});
		}
	}

	/* registro a la base de datos */
	public void envioBaseDatos() {

		boolean respuesta1 = false;
		boolean respuesta2 = false;
		HttpClient httpClient = new DefaultHttpClient();
		// URL del servidor para guardar los datos de zona lavado
		HttpPost post1 = new HttpPost(URL_REGISTRO_ROTACION_AGUA);
		HttpPost post2 = new HttpPost(URL_REGISTRO_LIMPIEZA_TANQUE);

		try {
			// Construimos el objeto cliente en formato JSON
			JSONObject dato1 = new JSONObject();
			JSONObject dato2 = new JSONObject();
			if (chBxRotaAgua.isEnabled() && chBxRotaAgua.isChecked()) {
				dato1.put("empleado_id",
						Integer.parseInt(this.getIdOperarioEmpleado()));
				dato1.put("fecha_usuario", this.getFechaUsuario());
				dato1.put("fecha_sistema", this.getFechaSistema());
				dato1.put("hora_usuario", this.getTiempoUsuario());
				dato1.put("hora_sistema", this.getTiempoSistema());
				dato1.put("rotacion_agua", this.isRotaAgua());
				StringEntity entity1 = new StringEntity(dato1.toString());
				post1.setHeader("Content-Type",
						"application/json; chartset=UTF-8");

				post1.setEntity(entity1);
				HttpResponse resp1 = httpClient.execute(post1);
				String respStr1 = EntityUtils.toString(resp1.getEntity());

				if (respStr1.equals("true")) {
					Log.e("ServicioRest",
							"el servidor me retorno true en  RotaAgua");

					respuesta1 = true;
					runOnUiThread(new Runnable() {
						public void run() {
							chBxRotaAgua.setEnabled(false);
							Log.e("ServicioRest",
									"se bloquea el checkbox de rotacion de agua");

						}
					});

					runOnUiThread(new Runnable() {
						public void run() {
							btnRegLimpTanqR.setEnabled(false);
							Log.e("ServicioRest",
									"se bloquea el boton de registrar limp tanque");

						}
					});
				}
			}

			if (chBxLimpTanque.isEnabled() && chBxLimpTanque.isChecked()) {
				dato2.put("empleado_id",
						Integer.parseInt(this.getIdOperarioEmpleado()));
				dato2.put("fecha_usuario", this.getFechaUsuario());
				dato2.put("fecha_sistema", this.getFechaSistema());
				dato2.put("hora_usuario", this.getTiempoUsuario());
				dato2.put("hora_sistema", this.getTiempoSistema());
				dato2.put("limpieza_tanque", this.isLimpiaTanque());

				StringEntity entity2 = new StringEntity(dato2.toString());
				post2.setHeader("Content-Type",
						"application/json; chartset=UTF-8");
				post2.setHeader("Accept", "application/json");
				post2.setEntity(entity2);
				HttpResponse resp2 = httpClient.execute(post2);
				final String respStr2 = EntityUtils.toString(resp2.getEntity());
				Log.e("ServicioRest", "ejecuta el post2");

				if (respStr2.equals("true")) {
					Log.e("ServicioRest",
							"el servidor me retorno true en limpTanque");
					respuesta2 = true;
					runOnUiThread(new Runnable() {
						public void run() {
							chBxLimpTanque.setEnabled(false);
							Log.e("ServicioRest",
									"se bloquea el checkbox de lavado de tanque");

						}
					});

					runOnUiThread(new Runnable() {
						public void run() {
							btnRegLimpTanqR.setEnabled(false);
							Log.e("ServicioRest",
									"se bloquea el boton de registrar limp tanque");

						}
					});
				}
			}
			if (respuesta2 || respuesta1) {
				runOnUiThread(new Runnable() {
					public void run() {
						progressDialog.dismiss();
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.msjMuyBien,
								R.string.msjRegistroExitoso,
								R.string.btnAceptar);
						Log.e("ServicioRest",
								"el servidor me retorno true y esta en el mensaje en pantalla");

					}
				});

				runOnUiThread(new Runnable() {
					public void run() {
						if (!chBxRotaAgua.isEnabled()
								&& !chBxLimpTanque.isEnabled()) {

							btnRegLimpTanqR.setEnabled(false);
							Log.e("ServicioRest",
									"Bloquea el boton registrar limp tanque ");
						}
					}

				});
			} else {

				Log.e("ServicioRest", "me salta al else de Respuesta ");
				// mensaje de respuesta del servidor
				runOnUiThread(new Runnable() {
					public void run() {
						progressDialog.dismiss();
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.tituloError,
								R.string.msjEREnviandoDatos,
								R.string.btnAceptar);

					}
				});

			}
		} catch (Exception ex) {
			Log.e("ServicioRest", "me salta al catch");
			// mensaje de respuesta del servidor
			runOnUiThread(new Runnable() {
				public void run() {
					progressDialog.dismiss();
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloError, R.string.msjERConexionEnviar,
							R.string.btnAceptar);

				}
			});
		}
	}

	/* valida si los campos de usuario estan vacios */
	public void validarUsuario() {

		String ced = this.getIdEmpleado();
		String pass = this.getPasswEmpleado();
		HttpClient httpClient = new DefaultHttpClient();
		HttpPost post = new HttpPost(URL_VALIDAR_USUARIO);// operarios
		post.setHeader("content-type", "application/json");

		try {

			// Construimos el objeto en formato JSON
			JSONObject dato = new JSONObject();
			dato.put("cedula", ced);// cedula del operario
			dato.put("password", pass);// contraseña del operario
			dato.put("formulario", "f_limp_tanque");// permisos

			StringEntity entity = new StringEntity(dato.toString());
			post.setEntity(entity);
			HttpResponse resp = httpClient.execute(post);
			this.setIdOperarioEmpleado(EntityUtils.toString(resp.getEntity()));

			if (this.getIdOperarioEmpleado().equals(CNV)) {
				runOnUiThread(new Runnable() {
					public void run() {
						progressDialog.dismiss();
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.tituloAlerta,
								R.string.msjCedulaIncorrecta,
								R.string.btnAceptar);

					}
				});

			} else {
				if (this.getIdOperarioEmpleado().equals(PNV)) {
					runOnUiThread(new Runnable() {
						public void run() {
							progressDialog.dismiss();
							manejadorMensajes.alertMessageOneButton(activity,
									R.string.tituloAlerta,
									R.string.msjPasswordIncorrecta,
									R.string.btnAceptar);

						}
					});

				} else {

					if (this.getIdOperarioEmpleado().equals(no_permiso)) {
						runOnUiThread(new Runnable() {
							public void run() {
								progressDialog.dismiss();
								manejadorMensajes.alertMessageOneButton(
										activity, R.string.tituloAlerta,
										R.string.msjSinPermisos,
										R.string.btnAceptar);

							}
						});
					} else {

						new Thread(new Runnable() {
							@Override
							public void run() {
								self.envioBaseDatos();
								Log.e("ServicioRest", "entra envio basedatos");

							}
						}).start();
					}

				}

			}

		} catch (Exception ex) {
			runOnUiThread(new Runnable() {
				public void run() {
					progressDialog.dismiss();
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloError, R.string.msjERvalidarUsuario,
							R.string.btnAceptar);

				}
			});

		}

	}

	// metodo que controla el boton atr�s
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {

		if (keyCode == KeyEvent.KEYCODE_BACK) {
			if (this.salir()) {

				new AlertDialog.Builder(this)
						.setIcon(android.R.drawable.ic_dialog_alert)
						.setTitle(R.string.tituloAlerta)
						.setMessage(R.string.msjPregunta)
						.setNegativeButton(R.string.btnNo, null)// sin listener
						.setPositiveButton(R.string.btnSi,
								new DialogInterface.OnClickListener() {// un
									// listener que al pulsar, cierre la
									// aplicacion
									@Override
									public void onClick(DialogInterface dialog,
											int which) {
										// Salir
										LimpTanqueReserva.this.finish();
									}
								}).show();

				// Si el listener devuelve true, significa que el evento esta
				// procesado, y nadie debe hacer nada mas
				return true;
			} else {
				LimpTanqueReserva.this.finish();
			}
		}
		// para las demas cosas, se reenvia el evento al listener habitual
		return super.onKeyDown(keyCode, event);
	}

	/* verifica si no hay ningun dato en memoria ni en campos */
	public boolean salir() {

		if (this.isSALIR()) {
			return true;
		} else {
			return false;
		}

	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);

		outState.putString("fecha", date);
		outState.putString("hora", time);
		outState.putBoolean("btnRegistro", this.btnRegLimpTanqR.isEnabled());

	}

	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		super.onRestoreInstanceState(savedInstanceState);

		this.setFechaUsuario(savedInstanceState.getString("fecha"));
		this.setTiempoUsuario(savedInstanceState.getString("hora"));
		this.btnRegLimpTanqR.setEnabled(savedInstanceState
				.getBoolean("btnRegistro"));

	}

}
